package com.ssyt.yt1.day27;

/**
 * 【*】Runnable可以实现资源共享、代码重用（多线程操作时要注意线程安全问题！）
 *
 * @author Hsu.
 * @since 2015年12月31日
 */
public class RunnableDemo {

	public static void main(String[] args) {
		Runnable runnable = new TicketsByRunnable();
		new Thread(runnable, "线程1").start();
		new Thread(runnable, "线程2").start();
		new Thread(runnable, "线程3").start();
	}
}

class TicketsByRunnable implements Runnable {

	// 多线程操作下，共享资源一定要私有并要上同步锁！
	private int ticktes = 10;

	// @Override
	// public void run() {
	// for (int i = 0; i < 10; i++) {
	// // 同步操作要理解的两个点：
	// // 1、锁的是谁？
	// // 2、锁又是被谁拿到了？
	// synchronized (this) {
	// if (ticktes > 0) {
	// try {
	// Thread.sleep(100);
	// } catch (InterruptedException e) {
	// e.printStackTrace();
	// }
	// System.out.println(Thread.currentThread().getName()
	// + ", 剩余票数：" + --ticktes);
	// }
	// }
	// }
	// }

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			operate();
		}
	}

	public synchronized void operate() {
		if (ticktes > 0) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + ", 剩余票数："
					+ --ticktes);
		}
	}
}